// 这个文件是对ajax的二次封装
// 目的是为了让整个项目发送ajax请求时，通用的配置不用重复编写
import 'nprogress/nprogress.css'
import NProgress from 'nprogress'
// 1.引入axios模块
import axios from 'axios'

// 2.创建axios实例对象，以后整个项目都要用这个实例来发送请求
const ajax = axios.create({
  //所有异步请求的目标服务器地址
  // 下面的/表示当前服务器地址 就是http://127.0.0.1:8080/
  baseURL: '/api',
  timeout: 5000,
})

// 3.设置请求拦截器，只要已发送请求，就会先走这个流程
ajax.interceptors.request.use((config) => {
  NProgress.start()
  console.log('这里是请求拦截器中的内容', config)
  return config
})
// 4.设置响应拦截器，只要请求响应回来了，就会执行这里的函数
ajax.interceptors.response.use(
  (response) => {
    NProgress.done()
    console.log('这里是响应拦截器中执行的内容', response)
    return response.data //我们要的数据是放在data中的，所以我们只需要返回data中的数据
  },
  (error) => {
    NProgress.done()
    //如果响应失败了就会执行这里的代码
    // console.log(error)
    // 如果发送请求出错了,会在这里统一提示错误信息
    // return error.message 如果只写这个是错误的，因为错误信息是字符串的话是非Promise值,也会认为是成功
    // 返回失败的Promise实例  目的是走程序员自己设置的错误信息
    return Promise.reject(new Error(error.message))
  }
)

// 5.导出对象
export default ajax
